package com.edu.exam.enums.quality.monitoring;

/**
 * 紧急程度枚举
 * 
 * <p>定义通知或任务的紧急程度分类。</p>
 * 
 * @author 系统生成
 * @version 1.0
 * @since 2025-11-10
 */
public enum UrgencyLevel {
    
    /**
     * 低
     * <p>低紧急程度，可以稍后处理。</p>
     */
    LOW("低", "低紧急程度，可以稍后处理"),
    
    /**
     * 中
     * <p>中等紧急程度，需要及时处理。</p>
     */
    MEDIUM("中", "中等紧急程度，需要及时处理"),
    
    /**
     * 高
     * <p>高紧急程度，需要优先处理。</p>
     */
    HIGH("高", "高紧急程度，需要优先处理"),
    
    /**
     * 紧急
     * <p>紧急程度，需要立即处理。</p>
     */
    URGENT("紧急", "紧急程度，需要立即处理");
    
    private final String displayName;
    private final String description;
    
    UrgencyLevel(String displayName, String description) {
        this.displayName = displayName;
        this.description = description;
    }
    
    public String getDisplayName() {
        return displayName;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据显示名称获取枚举
     * 
     * @param displayName 显示名称
     * @return 对应的枚举值
     */
    public static UrgencyLevel fromDisplayName(String displayName) {
        for (UrgencyLevel level : values()) {
            if (level.getDisplayName().equals(displayName)) {
                return level;
            }
        }
        return MEDIUM;
    }
    
    /**
     * 判断是否为高紧急程度
     * 
     * @return 如果是高紧急程度返回true
     */
    public boolean isHighUrgency() {
        return this == HIGH || this == URGENT;
    }
    
    /**
     * 判断是否为低紧急程度
     * 
     * @return 如果是低紧急程度返回true
     */
    public boolean isLowUrgency() {
        return this == LOW;
    }
    
    /**
     * 获取紧急程度对应的优先级数值
     * 
     * @return 优先级数值（1-4）
     */
    public int getPriorityValue() {
        return switch (this) {
            case LOW -> 1;
            case MEDIUM -> 2;
            case HIGH -> 3;
            case URGENT -> 4;
        };
    }
}